#include "stm32f10x.h"
#include "bsp_4led.h"
#include "bsp_DigitalTube.h"
#include "bsp_exti.h"
#include "bsp_ec11.h"

// 全局变量定义
volatile uint8_t displayNumber = 0;      // 数码管显示的数字
volatile uint8_t ec11_sw_pressed = 0;    // EC11开关状态
volatile uint8_t key_led_blink = 0;      // LED4闪烁标志
volatile uint32_t systick_counter = 0;   // SysTick计数器
// 按键LED闪烁控制
uint16_t key_led_timer = 0;
// LED任务控制变量
uint32_t led_task_timer = 0;
uint8_t current_led = 0;  // 0:LED1, 1:LED2, 2:LED3
uint8_t led_state = 0;    // 0:灭, 1:亮

// 简单延时函数（基于SysTick）
void Delay_ms(uint32_t nTime)
{
    uint32_t start_time = systick_counter;
    while((systick_counter - start_time) < nTime);
}


// 初始化SysTick
void SysTick_Init(void)
{
    // 配置SysTick为1ms中断
    if (SysTick_Config(SystemCoreClock / 1000)) {
        while (1); // 初始化失败
    }
}

// 更新数码管显示
void UpdateDisplay(void)
{
    if(ec11_sw_pressed) {
        // EC11按下时显示中间横杠
        DISPLAY_HYPHEN();
    } else {
        // 正常显示数字
        displayDigit(displayNumber);
    }
}

// LED任务 - 轮流点亮LED1~LED3
void LED_Task(void)
{
    static uint32_t last_time = 0;
    
    // 每100ms检查一次状态
    if(systick_counter - last_time >= 100) {
        last_time = systick_counter;
        
        if(led_state == 1) {
            // 亮灯状态，检查是否达到600ms
            if(systick_counter - led_task_timer >= 600) {
                led_state = 0;
                led_task_timer = systick_counter;
                
                // 关闭当前LED
                switch(current_led) {
                    case 0: LED1_OFF(); break;
                    case 1: LED2_OFF(); break;
                    case 2: LED3_OFF(); break;
                }
            }
        } else {
            // 灭灯状态，检查是否达到400ms
            if(systick_counter - led_task_timer >= 400) {
                led_state = 1;
                led_task_timer = systick_counter;
                
                // 切换到下一个LED
                current_led = (current_led + 1) % 3;
                
                // 点亮新LED
                switch(current_led) {
                    case 0: LED1_ON(); break;
                    case 1: LED2_ON(); break;
                    case 2: LED3_ON(); break;
                }
            }
        }
    }
}

// 按键LED闪烁任务
void KeyLED_Task(void)
{
    static uint32_t last_blink_time = 0;
    
    if(key_led_blink) {
        if(systick_counter - last_blink_time >= 200) {  // 闪烁50ms后关闭
            LED4_OFF();
            key_led_blink = 0;
        }
    } else {
        last_blink_time = systick_counter;
    }
}

// 系统初始化
void System_Init(void)
{
    // 初始化外设
    LED_GPIO_Config();
    DigitalTube_GPIO_Config();
    EXTI_Key_Config();     // KEY1, KEY2中断
    EC11_SW_Config();      // EC11开关中断
    SysTick_Init();        // SysTick初始化
    
    // 初始显示0
    displayDigit(displayNumber);
    
    // 初始状态：所有LED灭
    LED1_OFF();
    LED2_OFF();
    LED3_OFF();
    LED4_OFF();
}

int main(void)
{
    // 系统初始化
    System_Init();
    
    while(1)
    {
        // 1. LED轮流点亮任务
        if(!ec11_sw_pressed) {
            LED_Task();
        }
        
        // 2. 按键LED闪烁任务
        KeyLED_Task();
        
        // 3. 更新数码管显示
        UpdateDisplay();
    }
}
